package com.example.mysql.学习笔记.高级.数据库的优化之索引.InnoDB数据存储结构存储;

public class 表空间 {
}
/**
 * 表空间可以看做是InnoDB存储弓|擎逻辑结构的最高层，所有的数据都存放在表空间中。
 * 表空间是一个逻辑容器，表空间存储的对象是段，在一个表空间中可以有一个或多个段，
 * 但是一个段只能属 于一个表空间。
 * 表空间数据库由一个或多个表空间组成，表空间从管理.上可以划分为：
 *
 * 系统表空间，独立表空间、撤销表空间和临时表空间等。
 *
 *
 * 独立表空间
 * 独立表空间，即每张表有一个独立的表空间，也就是数据和索引信息都会保存在自己的表空间中。
 * 独立的表空间(即:单表)可以在不同的数据库之间进行迁移。
 * 空间可以回收(操作可自动回收表空间;其他情况，表空间不能自己回收)。
 * 如果对于统计分析或是日志表，删除大量数据后可以通过:
 * alter table TableName engine=innodb; 回收不用的空间。
 * 对于使用独立表空间的表，不管怎么删除，表空间的碎片不会太严重的影响性能，
 * 而且还有机会处理。“独立表空间结构独立表空间由段、区、页组成。前面已经讲解过了。
 * 真实表空间对应的文件大小
 * 我们到数据目录里看，会发现一个新建的表对应的 .
 * ibd文件只占用了96K，才6个页面大小(MySQL5.7中) ,
 * 这是因为一开始表空间占用的空间很小，因为表里边都没有数据。
 * 不过别忘了这些.ibd文件是自扩展的，随着表中数据的增多,表空间对应的文件也逐渐增大。
 *
 */

/**
 *5.2系统表空间
 * 系统表空间的结构和独立表空间基本类似，只不过由于整个MySQL进程只有一个系统表空间，
 * 在系统表空间中会额外记录一些有关整个系统信息的页面， 这部分是独立表空间中没有的。
 *
 * InnoDB数据字典
 * 每当我们向一个表中插入-条记录的时候， MySQL校验过程 如下:
 * 先要校验--下插入语句对应的表存不存在,插入的列和表中的列是否符合，
 * 如果语法没有问题的话，
 * 还需要知道该表的聚簇索引和所有二级索引对应的根页面是哪个表空间的哪个页面，
 * 然后把记录插入对应索引的B+树中。
 * 所以说，MySQL除 了保存着我们插入的用户数据之外，还需要保存许多额外的信息，比方说:
 *     -某个表属于哪个表空间，表里边有多少列
 *     -表对应的每一 个列的类型是什么
 *     -该表有多少索引，每个索引对应哪几个字段，
 *          该索引对应的根页面在哪个表空间的哪个页面
 *     一该表有哪些外键，外键对应哪个表的哪些列
 *     -某个表空间对应文件系统上文件路径是什么
 * 上述这些数据并不是我们使用INSERT语句插入的用户数据，
 * 实际上是为了更好的管理我们这些用户数据而不得已引入的一些额外数据，这些数据也称为元数据。
 * InnoDB存储引擎特意定义了--些列的内部系统表来记录这些这些元数据:
 *
 */